home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
comm
/
tcp
/
wu_ftpd_37_21.lha
/
wu-ftpd
/
src
/
fixes.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-09-09
|
2KB
|
74 lines
/*
* This is a fixed version of lstat() from AmiTCP 3.0 beta 2.
*
* Author is Pekka Pessi <Pekka.Pessi@hut.fi>.
*
* Copyright © 1993,1994 AmiTCP/IP Group, <amitcp-group@hut.fi>
* Helsinki University of Technology, Finland.
* All rights reserved.
*/
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <proto/dos.h>
#include <proto/utility.h>
#include "AmiTCP:src/netlib/netlib.h"
#include "AmiTCP:src/netlib/fibex.h"
int lstat(const char *name, struct stat *st)
{
/* Cannot lock - do examine via Examine()/ExNext() */
int rc = -1;
char *cname;
if (st == NULL || ((1 & (long)st) == 1)) {
errno = EFAULT;
return -1;
}
cname = malloc(strlen(name) + 1);
if (cname) {
BPTR lock;
char *pp = PathPart(strcpy(cname, name));
*pp = '\0';
if (lock = Lock(cname, SHARED_LOCK)) {
pp = FilePart((char *)name);
if (Examine(lock, __dostat_fib)) {
while (ExNext(lock, __dostat_fib)) {
if (Stricmp(pp, __dostat_fib->fib_FileName) == 0) {
__dostat(__dostat_fib, st);
st->st_dev = (dev_t)((struct FileLock *)BADDR(lock))->fl_Task;
rc = 0;
break;
}
}
}
if (rc != 0)
errno = ENOENT;
/* !!! FIX !!!
* This UnLock() was missing,
* fixed 08/94 by Blaz Zupan
*/
UnLock(lock);
} else {
set_errno(IoErr());
}
free(cname);
} else {
errno = ENOMEM;
}
return rc;
}